/******************************************************************************* * Copyright (c) 2013, 2016 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation * Patrik Suzzi <psuzzi@gmail.com> - Bug 489250 ******************************************************************************/ package org.eclipse.ui.internal.themes; import com.ibm.icu.text.MessageFormat; import java.util.ResourceBundle; /** * @since 3.5 * */ public class ThemeElementDefinition { private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(Theme.class .getName()); public static interface State { int UNKNOWN = 0; int OVERRIDDEN = 1; int ADDED_BY_CSS = 2; int MODIFIED_BY_USER = 4; } private String id; private String label; private String description; private String formattedDescription; private String categoryId; private int state = State.UNKNOWN; private int stateDuringFormattingMessage; public ThemeElementDefinition(String id, String label, String description, String categoryId) { this.id = id; this.label = label; this.description = description; this.categoryId = categoryId; } /** * @return the id of this definition. Should not be <code>null</code>. */ public String getId() { return id; } /** * Returns the label. * * @return String */ public String getName() { return label; } public void setName(String label) { this.label = label; appendState(State.OVERRIDDEN); } /** * Returns the description. * * @return String or * * <pre> * null * </pre> * * . */ public String getDescription() { if (formattedDescription == null || stateDuringFormattingMessage != state) { formattedDescription = formatDescription(); stateDuringFormattingMessage = state; } return formattedDescription; } private String formatDescription() { String description = this.description != null && this.description.trim().length() != 0 ? this.description : label; if (isAddedByCss() && isModifiedByUser()) { return MessageFormat.format(RESOURCE_BUNDLE.getString("Added.by.css.and.modified.by.user.label"), //$NON-NLS-1$ description).trim(); } if (isAddedByCss()) { return MessageFormat.format(RESOURCE_BUNDLE.getString("Added.by.css.label"), //$NON-NLS-1$ description).trim(); } if (isOverridden() && isModifiedByUser()) { return MessageFormat.format(RESOURCE_BUNDLE.getString("Overridden.by.css.and.modified.by.user.label"), //$NON-NLS-1$ description).trim(); } if (isOverridden()) { return MessageFormat.format(RESOURCE_BUNDLE.getString("Overridden.by.css.label"), //$NON-NLS-1$ description).trim(); } return description; } public void setDescription(String description) { this.description = description; formattedDescription = null; appendState(State.OVERRIDDEN); } /** * Returns the categoryId. * * @return String */ public String getCategoryId() { return categoryId; } public void setCategoryId(String categoryId) { this.categoryId = categoryId; appendState(State.OVERRIDDEN); } public int getState() { return state; } public void appendState(int state) { this.state |= state; } public void removeState(int state) { this.state &= ~state; } public boolean isOverridden() { return (state & State.OVERRIDDEN) != 0; } public boolean isAddedByCss() { return (state & State.ADDED_BY_CSS) != 0; } public boolean isModifiedByUser() { return (state & State.MODIFIED_BY_USER) != 0; } public void resetToDefaultValue() { state = State.UNKNOWN; } }